#include <iostream>
#include <cstring>
#include <stdlib.h>

using namespace std;

// 身份证类
class ID
{
private:
    char *id;              //保存18位身份证号
    int year, month, date; // y,m,d分别表示持证人的出生年、月、日
    char sex;              //持证人的性别（”M”或”F”） M代表男性，F代表女性

public:
    //用参数s初始化成员id（需申请动态内存），并将year,month,date初始化为0
    void set_ID(char *s)
    {
        id = new char[18];
        strcpy(id, s);
    }

    //根据身份证号计算持证人的出生年月和性别，并判断其是否为青年，并将获得的信息存储到对应的数据成员中
    void fun()
    {
        char *yearStr = new char[5], *monthStr = new char[3], *dateStr = new char[3];
        strncpy(yearStr, id + 6, 4);   // 年
        strncpy(monthStr, id + 10, 2); // 月
        strncpy(dateStr, id + 12, 2);  // 日
        yearStr[4] = '\0';
        monthStr[2] = '\0';
        dateStr[2] = '\0';

        // 性别
        char *sexStr = new char[2];
        sexStr[0] = id[16];
        sexStr[1] = '\0';

        // atoi char[] 转 int
        year = atoi(yearStr);
        month = atoi(monthStr);
        date = atoi(dateStr);
        int sexInt = atoi(sexStr);

        sex = sexInt % 2 == 0 ? 'F' : 'M';
    };
    // 输出持证人的信息
    void print()
    {
        printf("%s\n", id);
        printf("%d.%d.%d\n", year, month, date);
        printf("%c\n", sex);

        int mYear = 2015 - year, mMonth = 10 - month, mDate = 1 - date;

        int max = 0;
        if (sex == 'M') // 男
        {
            max = 40;
        }
        else if (sex == 'F') // 女
        {
            max = 35;
        }

        if ((mYear == max && mMonth >= 0 && mDate >= 0) || mYear < max)
        {
            printf("%c\n", 'Y');
        }
        else
        {
            printf("%c\n", 'N');
        }
    };
    //析构函数，进行必要的操作
    ~ID()
    {
        delete id;
    };
};

int main()
{
    int T, i;
    char id[19];

    cin >> T;
    ID person[T];

    for (i = 0; i < T; i++)
    {
        if (i > 0 && i < T)
            cout << endl;
        cin >> id;
        person[i].set_ID(id);
        person[i].fun();
        person[i].print();
    }

    return 0;
}
